package com.sosee.cgfw;

import android.app.AlarmManager;
import android.app.Application;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.view.View;

import com.sosee.cgfw.activity.Splash;
import com.sosee.cgfw.friends.FriendsTogetherInfos;
import com.sosee.cgfw.utils.LogUtils;
import com.sosee.cgfw.utils.Utils;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

import java.util.Set;

import cn.jpush.android.api.JPushInterface;
import io.rong.imkit.RongIM;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.UserInfo;

/**
 * Created by Thinkpad on 2016/1/28.
 */
public class MyApplication extends Application {
    PendingIntent restartIntent;

    @Override
    public void onCreate() {
        super.onCreate();
        //初始化 极光推送
        JPushInterface.init(this);
        JPushInterface.setDebugMode(false);


        //初始化融云及时通信
        RongIM.init(getApplicationContext());

        initData();
//        // 以下用来捕获程序崩溃异常
//        Intent intent = new Intent();
//        // 参数1：包名，参数2：程序入口的activity
//        intent.setClassName(getPackageName(), Splash.class.getName());
////        intent.setClassName("com.example.sousee.chinafashionweek", "com.sosee.cgfw.activity.Splash");
//        restartIntent = PendingIntent.getActivity(getApplicationContext(), 0,
//                intent, Intent.FLAG_ACTIVITY_NEW_TASK);
//        Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃时触发线程
    }
    //初始化
    public void initData(){
        initImageLoader();

        Utils utils=new Utils(getApplicationContext());

        RongIM.setConversationBehaviorListener(new RongIM.ConversationBehaviorListener() {


            @Override
            public boolean onUserPortraitClick(Context context, Conversation.ConversationType conversationType, UserInfo userInfo) {


                //在这里处理你想要跳转的activity，示例代码为YourAcitivy

                Intent in = new Intent(context, FriendsTogetherInfos.class);
                in.putExtra("together", userInfo.getUserId());
                context.startActivity(in);
                return true;

            }

            @Override
            public boolean onUserPortraitLongClick(Context context, Conversation.ConversationType conversationType, UserInfo userInfo) {
                return false;
            }

            @Override
            public boolean onMessageClick(Context context, View view, Message message) {
                return false;
            }

            @Override
            public boolean onMessageLinkClick(Context context, String s) {
                return false;
            }

            @Override
            public boolean onMessageLongClick(Context context, View view, Message message) {
                return false;
            }
        });

    }


    public Thread.UncaughtExceptionHandler restartHandler = new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            LogUtils.log_E("app崩溃异常" + ex.toString());
            AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000,
                    restartIntent); // 1秒钟后重启应用
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    };



    public void initImageLoader(){
        ImageLoaderConfiguration config = new ImageLoaderConfiguration
                .Builder(this)
                .memoryCacheExtraOptions(480, 800) // max width, max height，即保存的每个缓存文件的最大长宽
                .threadPoolSize(3)//线程池内加载的数量
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)
                .discCacheSize(50 * 1024 * 1024)
                .discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .discCacheFileCount(100) //缓存的文件数量
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间
                .build();//开始构建
        // Initialize ImageLoader with configuration.

        //以上的配置看个人需求进行选择，不是所有都要进行配置。
        //配置好ImageLoaderConfiguration后，调用以下方法来实现初始化：

        ImageLoader.getInstance().init(config);//全局初始化此配置


        //使用ImageLoader进行图片加载的时候，先要实例化ImageLoader，调用以下方法进行实例化，在每个布局里面都要实例化后再使用。


    }



}
